﻿using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ShopNet.Model;
using ShopNet.Util;

namespace ShopNet.Admin
{
    public partial class EditarProduto : System.Web.UI.Page
    {
        private Produto prod = new Produto();

        #region Propriedades

        protected long IdProduto
        {
            get
            {
                if (ViewState["IdProduto"] == null) return 0;
                return Convert.ToInt32(ViewState["IdProduto"]);
            }

            set { ViewState.Add("IdProduto", value); }
        }

        #endregion

        #region Metodos

        #region CarregarProduto

        private void CarregarProduto()
        {
            if (IdProduto > 0)
                prod = NServico.Db.Produtos.FirstOrDefault(p => p.IdProduto == IdProduto);
            lIdProduto.Text = prod.IdProduto.ToString();
            tbDescricao.Text = prod.Descricao;
            tbNome.Text = prod.Nome;

            //string precoConvert = prod.Preco.ToString("#0.00");
            string precoDescontoConvert = prod.precoDesconto.ToString("#0.00");
            string precoPacoteConvert = prod.PrecoPacote.ToString("#0.00");
            string pesoConvert = prod.Peso.ToString("#0.00###");
            if (System.Globalization.NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator != ",")
            {
                //precoConvert = precoConvert.Replace('.', ',');
                precoDescontoConvert = precoDescontoConvert.Replace('.', ',');
                precoPacoteConvert = precoPacoteConvert.Replace('.', ',');
                pesoConvert = pesoConvert.Replace(".", ",");
            }


            //tbPreco.Text = precoConvert; 
            tbPrecoDesconto.Text = precoDescontoConvert;
            tbPrecoPacote.Text = precoPacoteConvert;
            tbPeso.Text = pesoConvert;
            //tbQuantidade.Text = prod.QuantidadeEstoque.ToString();
            tbQtdeEstoque.Text = prod.QtdeEstoque.ToString();
            tbQtdeCadaPacote.Text = prod.QtdeCadaPacote.ToString();
            tbQtdePorItem.Text = prod.QtdePorItem.ToString();
            cbDisponibilidade.Checked = prod.Disponibilidade;
            cbDestaque.Checked = prod.Destaque;
        }

        #endregion

        #region CarregarCategoria e SubCategoria

        private void CarregarCategoria()
        {
            IList<Categoria> lista = NServico.Db.Categorias.ToList();
            ddlCategoria.DataSource = lista;
            ddlCategoria.DataTextField = "Descricao";
            ddlCategoria.DataValueField = "IdCategoria";
            ddlCategoria.DataBind();
            ddlCategoria.SelectedIndex = -1;

            if (IdProduto>0)
            {
                ListItem li = ddlCategoria.Items.FindByValue(prod.IdCategoria.ToString());
                if (li != null)
                    li.Selected = true;

            }

            CarregarSubCategoria();

        }

        private void CarregarSubCategoria()
        {
            IList<SubCategoria> lista = NServico.Db.SubCategorias.Where(sc=>sc.IdCategoria==int.Parse(ddlCategoria.SelectedValue)).ToList();
            ddlSubCategoria.DataSource = lista;
            ddlSubCategoria.DataTextField = "Descricao";
            ddlSubCategoria.DataValueField = "IdSubCategoria";
            ddlSubCategoria.DataBind();
            ddlSubCategoria.SelectedIndex = -1;

            if (IdProduto>0)
            {
                ListItem li = ddlSubCategoria.Items.FindByValue(Convert.ToString(prod.IdSubCategoria));
                if (li != null)
                    li.Selected = true;
            }
        }

        #endregion

        #endregion
        
        #region Eventos

        #region Page_Load

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (!string.IsNullOrWhiteSpace(Request.QueryString["IdProduto"]) &&
                    BaseCompareValidator.CanConvert(Request.QueryString["IdProduto"], ValidationDataType.Integer))
                {
                    IdProduto = Convert.ToInt32(Request.QueryString["IdProduto"]);
                    CarregarProduto();
                    bUploadImagem.Visible = true;
                }

                
                CarregarCategoria();
            }
        }

        

        #endregion

        #region bSalvar_Click

        protected void bSalvar_Click(object sender, EventArgs e)
        {
            if (IdProduto > 0)
                prod = NServico.Db.Produtos.FirstOrDefault(p => p.IdProduto == IdProduto);
            
            
            prod.Descricao = tbDescricao.Text;
            prod.Nome = tbNome.Text;
            prod.Disponibilidade = cbDisponibilidade.Checked;
            prod.Destaque = cbDestaque.Checked;
            
            //prod.IdCategoria = Convert.ToInt32(ddlCategoria.SelectedValue);
            prod.Categoria = NServico.Db.Categorias.FirstOrDefault(c => c.IdCategoria == Convert.ToInt32(ddlCategoria.SelectedValue));

            //string precoConvert = tbPreco.Text;
            string precoDescontoConvert = tbPrecoDesconto.Text;
            string precoPacoteConvert = tbPrecoPacote.Text;
            string pesoConvert = tbPeso.Text;

            if (System.Globalization.NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator!=",")
            {
                //precoConvert = precoConvert.Replace(',', '.');
                precoDescontoConvert = precoDescontoConvert.Replace(',', '.');
                precoPacoteConvert = precoPacoteConvert.Replace(',', '.');
                pesoConvert = pesoConvert.Replace(",", ".");
            }

            //prod.Preco = Convert.ToDecimal(precoConvert);
            prod.precoDesconto = Convert.ToDecimal(precoDescontoConvert);
            prod.PrecoPacote = Convert.ToDecimal(precoPacoteConvert);
            prod.Peso=Convert.ToDecimal(pesoConvert);
            //prod.QuantidadeEstoque = Convert.ToInt32(tbQuantidade.Text);
            prod.QtdeEstoque = Convert.ToInt32(tbQtdeEstoque.Text);
            prod.QtdeCadaPacote = Convert.ToInt32(tbQtdeCadaPacote.Text);
            prod.QtdePorItem = Convert.ToInt32(tbQtdePorItem.Text);

            //prod.IdSubCategoria = null;
            prod.SubCategoria = null;

            if (ddlSubCategoria.Items.Count > 0)
                //prod.IdSubCategoria = Convert.ToInt32(ddlSubCategoria.SelectedValue);
                prod.SubCategoria = NServico.Db.SubCategorias.FirstOrDefault(s => s.IdSubCategoria == Convert.ToInt32(ddlSubCategoria.SelectedValue));

            if (IdProduto<1)
            {
                NServico.Db.Produtos.InsertOnSubmit(prod);
            }
            NServico.Db.SubmitChanges(ConflictMode.FailOnFirstConflict);
            bUploadImagem.Visible = true;
            IdProduto = prod.IdProduto;
            Funcoes.Mensagem(Funcoes.TipoMensagem.Ok, spamMensagem, "Produto Salvo Com sucesso.");

        }

        #endregion

        #region bVoltar_Click

        protected void bVoltar_Click(object sender, EventArgs e)
        {
            Response.Redirect("ListarProdutos.aspx", true);
        }

        #endregion

        #region bUploadImagem_Click

        protected void bUploadImagem_Click(object sender, EventArgs e)
        {
            Response.Redirect(string.Format("UploadImageProduto.aspx?IdProduto={0}", IdProduto));
        }

        #endregion

        #region ddlCategoria_SelectedIndexChanged

        protected void ddlCategoria_SelectedIndexChanged(object sender, EventArgs e)
        {
            CarregarSubCategoria();
        }

        #endregion

        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Redirect("EditarProduto.aspx", true);
        }
        
        #endregion

      


        

       
    }
}